/* 
  class 类

  * 类中的实例方法和静态方法
    * 实例方法是通过类构造的实例对象去调用
    * 静态方法是类本身调用的方法：static静态方法，static方法中的this不会指向实例，而是指向类型
  * 类的继承 extends
*/

// function Person (name) {
//   this.name = name
// }
// Person.prototype.say = function () {
//   console.log(`hi, ${this.name}`)
// }

class Person {
  constructor (name) {
    this.name = name
  }

  say () {
    console.log(`hi, ${this.name}`)
  }

  static create (name) {
    // console.log(this) // this指向类型本身
    return new Person(name)
  }
}

class Student extends Person {
  constructor (name, number) {
    super(name) // super方法指向父类，调用即调用父类构造函数
    this.number = number
  }

  hello () {
    super.say() // super调用父类的方法
    console.log(`my number is ${this.number}`)
  }
}

const p = new Person('mike')
const p1 = Person.create('tom')
const s = new Student('jack', 10)
p.say()
p1.say()
s.hello()
